VintaSoft Imaging .NET SDK 14.0: Документация для .NET разработчика
Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000 Namespace / Jpeg2000Page Class / GetTileRectImage Methods / GetTileRectImage(Int32,Rectangle,Int32,EventHandler<ProgressEventArgs>) Method
Синтаксис Ремарки Example Требования Смотрите также
В этом разделе
    GetTileRectImage(Int32,Rectangle,Int32,EventHandler<ProgressEventArgs>) Метод (Jpeg2000Page)
    В этом разделе
    Возвращает изображение указанной области указанного фрагмента этой страницы, декодированное с указанным количеством вейвлет-уровней.
    Синтаксис
    'Declaration
    
    Public Overloads Function GetTileRectImage( _
    ByVal tileIndex
    Индекс плитки, начинающийся с нуля.
    As System.Int32, _
    ByVal region
    Прямоугольник в плитке для декодирования.
    As System.Drawing.Rectangle, _
    ByVal waveletLevels
    Количество дискретных уровней вейвлет-преобразования (уровней разложения).
    As System.Int32, _
    ByVal imageLoadingProgress
    Делегирует ход загрузки изображения. Может быть установлено значение null (Nothing в Visual Basic).
    As System.EventHandler(Of ProgressEventArgs) _
    ) As Vintasoft.Imaging.VintasoftImage

    Parameters

    tileIndex
    Индекс плитки, начинающийся с нуля.
    region
    Прямоугольник в плитке для декодирования.
    waveletLevels
    Количество дискретных уровней вейвлет-преобразования (уровней разложения).
    imageLoadingProgress
    Делегирует ход загрузки изображения. Может быть установлено значение null (Nothing в Visual Basic).

    Return Value

    Изображение указанной области указанного фрагмента этой страницы.
    Ремарки

    Плитка декодируется в немасштабированном виде, если waveletLevels равно WaveletLevels; в противном случае тайл декодируется с использованием масштаба (2 в степени (WaveletLevels - waveletLevels)).

    Пример

    Вот C#/VB.NET код, который демонстрирует, как открыть JPEG файл2000 и получить изображение его первого фрагмента по частям.

    
    ' Opens JPEG2000 file and gets its first tile's image by parts.
    Public Shared Function GetJpeg2000TileByParts(jpeg2000Filename As String) As Vintasoft.Imaging.VintasoftImage
        ' open an existing JPEG2000 file
        Using file As New Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000File(jpeg2000Filename, System.IO.FileMode.Open, System.IO.FileAccess.Read)
            ' get JPEG2000 page
            Dim page As Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000Page = file.Page
    
            ' get page dimensions and pixel format
            Dim imageWidth As Integer = page.Width
            Dim imageHeight As Integer = page.Height
    
            Dim palette As Vintasoft.Imaging.Palette = If(page.Palette IsNot Nothing, page.Palette, New Vintasoft.Imaging.Palette())
            Dim imageInfo As New Vintasoft.Imaging.Codecs.Decoders.ImageInfo(imageWidth, imageHeight, page.BitsPerPixel, palette, page.Resolution)
            Dim pixelFormat As Vintasoft.Imaging.PixelFormat = imageInfo.PixelFormat
    
            ' get first tile rectangle
            Dim firstTileRectangle As System.Drawing.Rectangle = page.GetTileGrid()(0)
    
            ' get tile dimensions
            Dim tileWidth As Integer = firstTileRectangle.Width
            Dim tileHeight As Integer = firstTileRectangle.Height
    
            ' if tile is too small, then get tile at once
            If tileWidth = 1 OrElse tileHeight = 1 Then
                Return page.GetTileRectImage(0, New System.Drawing.Rectangle(0, 0, tileWidth, tileHeight), Nothing)
            End If
    
            ' divide tile rectangle into 4 rectangles
            Dim grid As System.Drawing.Rectangle() = New System.Drawing.Rectangle(3) {}
            grid(0) = New System.Drawing.Rectangle(0, 0, tileWidth \ 2, tileHeight \ 2)
            grid(1) = New System.Drawing.Rectangle(tileWidth \ 2, 0, (tileWidth + 1) \ 2, tileHeight \ 2)
            grid(2) = New System.Drawing.Rectangle(0, tileHeight \ 2, tileWidth \ 2, (tileHeight + 1) \ 2)
            grid(3) = New System.Drawing.Rectangle(tileWidth \ 2, tileHeight \ 2, (tileWidth + 1) \ 2, (tileHeight + 1) \ 2)
    
            ' get number of wavelet levels
            Dim waveletLevel As Integer = page.WaveletLevels
    
            ' create a VintasoftImage object
            Dim resultImage As New Vintasoft.Imaging.VintasoftImage(tileWidth, tileHeight, pixelFormat)
    
            ' for each part of tile
            For i As Integer = 0 To 3
                ' get current rectangle
                Dim rectangle As System.Drawing.Rectangle = grid(i)
    
                ' get current rectangle location
                Dim position As System.Drawing.Point = rectangle.Location
    
                ' get image of current rectangle
                Using rectImage As Vintasoft.Imaging.VintasoftImage = page.GetTileRectImage(0, rectangle, waveletLevel, Nothing)
                    ' overlay rectangle image on result image
                    Dim overlayCommand As New Vintasoft.Imaging.ImageProcessing.OverlayCommand(rectImage, position)
                    overlayCommand.ExecuteInPlace(resultImage)
                End Using
            Next
    
            Return resultImage
        End Using
    End Function
    
    
    
    // Opens JPEG2000 file and gets its first tile's image by parts.
    public static Vintasoft.Imaging.VintasoftImage GetJpeg2000TileByParts(string jpeg2000Filename)
    {
        // open an existing JPEG2000 file
        using (Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000File file =
            new Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000File(
                jpeg2000Filename, System.IO.FileMode.Open, System.IO.FileAccess.Read))
        {
            // get JPEG2000 page
            Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000Page page = file.Page;
    
            // get page dimensions and pixel format
            int imageWidth = page.Width;
            int imageHeight = page.Height;
    
            Vintasoft.Imaging.Palette palette = page.Palette != null ? page.Palette : new Vintasoft.Imaging.Palette();
            Vintasoft.Imaging.Codecs.Decoders.ImageInfo imageInfo =
                new Vintasoft.Imaging.Codecs.Decoders.ImageInfo(
                    imageWidth,
                    imageHeight,
                    page.BitsPerPixel,
                    palette,
                    page.Resolution);
            Vintasoft.Imaging.PixelFormat pixelFormat = imageInfo.PixelFormat;
    
            // get first tile rectangle
            System.Drawing.Rectangle firstTileRectangle = page.GetTileGrid()[0];
    
            // get tile dimensions
            int tileWidth = firstTileRectangle.Width;
            int tileHeight = firstTileRectangle.Height;
    
            // if tile is too small, then get tile at once
            if (tileWidth == 1 || tileHeight == 1)
                return page.GetTileRectImage(0, new System.Drawing.Rectangle(0, 0, tileWidth, tileHeight), null);
    
            // divide tile rectangle into 4 rectangles
            System.Drawing.Rectangle[] grid = new System.Drawing.Rectangle[4];
            grid[0] = new System.Drawing.Rectangle(0, 0, tileWidth / 2, tileHeight / 2);
            grid[1] = new System.Drawing.Rectangle(tileWidth / 2, 0, (tileWidth + 1) / 2, tileHeight / 2);
            grid[2] = new System.Drawing.Rectangle(0, tileHeight / 2, tileWidth / 2, (tileHeight + 1) / 2);
            grid[3] = new System.Drawing.Rectangle(tileWidth / 2, tileHeight / 2, (tileWidth + 1) / 2, (tileHeight + 1) / 2);
    
            // get number of wavelet levels
            int waveletLevel = page.WaveletLevels;
    
            // create a VintasoftImage object
            Vintasoft.Imaging.VintasoftImage resultImage =
                new Vintasoft.Imaging.VintasoftImage(tileWidth, tileHeight, pixelFormat);
    
            // for each part of tile
            for (int i = 0; i < 4; i++)
            {
                // get current rectangle
                System.Drawing.Rectangle rectangle = grid[i];
    
                // get current rectangle location
                System.Drawing.Point position = rectangle.Location;
    
                // get image of current rectangle
                using (Vintasoft.Imaging.VintasoftImage rectImage = page.GetTileRectImage(0, rectangle, waveletLevel, null))
                {
                    // overlay rectangle image on result image
                    Vintasoft.Imaging.ImageProcessing.OverlayCommand overlayCommand =
                        new Vintasoft.Imaging.ImageProcessing.OverlayCommand(rectImage, position);
                    overlayCommand.ExecuteInPlace(resultImage);
                }
            }
    
            return resultImage;
        }
    }
    
    

    Требования

    Целевые платформы: .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5

    Смотрите также